package model.entities;

import java.util.Calendar;
import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import model.exceptions.EntityInvalidaException;
import model.persistence.daos.ReservaDAO;

@Entity
@Table(name = "Reservas")
public class Reserva
{
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;

	@OneToOne
	@JoinColumn(name = "idLocal")
	private Local local;

	@Column(name = "cantidadComensales")
	private int cantidadComensales;

	@Column(name = "fechaHora", nullable = false)
	private Calendar fechaHora;

	@Column(name = "nombreReferencia", nullable = false, length = 50)
	private String nombreReferencia;

	public Reserva()
	{

	}

	public Reserva(Local local, int cantidadComensales, Calendar fechaHora)
	{
		this.local = local;
		this.cantidadComensales = cantidadComensales;
		this.fechaHora = fechaHora;
	}

	public static boolean chequearDisponibilidad(int cantidadPersonas)
	{
		// TODO chequear disponibilidad en base a las reservas ya existentes.
		return true;
	}

	public static boolean reservarMesa(int nroLocal, int cantidadComensales, Calendar fechaHora)
	{
		Local local = Local.getLocal(nroLocal);

		if (local.sePuedeReservar(cantidadComensales))
		{
			Reserva reserva = new Reserva(local, cantidadComensales, fechaHora);
			try
			{
				ReservaDAO.save(reserva);
			}
			catch (EntityInvalidaException eie)
			{
				//MANEJAR EXCEPCION
			}

			return true;
		}

		return false;
	}

	public Local getLocal()
	{
		return local;
	}

	public void setLocal(Local local)
	{
		this.local = local;
	}

	public int getCantidadComensales()
	{
		return cantidadComensales;
	}

	public void setCantidadComensales(int cantidadComensales)
	{
		this.cantidadComensales = cantidadComensales;
	}

	public Calendar getFechaHora()
	{
		return fechaHora;
	}

	public void setFechaHora(Calendar fechaHora)
	{
		this.fechaHora = fechaHora;
	}

	public String getNombreReferencia()
	{
		return nombreReferencia;
	}

	public void setNombreReferencia(String nombre)
	{
		this.nombreReferencia = nombre;
	}

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}

	public static Collection<Reserva> getReservas(Collection<Integer> reservas)
	{
		// TODO Auto-generated method stub
		return null;
	}
}
